package free_test_3;

import java.io.*;

//// 1. 定义一个"危险"类（重写readObject，包含模拟恶意操作）
//class VulnerableClass implements Serializable {
//    private String content;
//
//    public VulnerableClass(String content) {
//        this.content = content;
//    }
//
//    // 提供 getter 方法以允许外部访问 content
//    public String getContent() {
//        return content;
//    }
//
//    // 反序列化时会自动调用该方法
//    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
//        // 正常反序列化逻辑（读取原始数据）
//        in.defaultReadObject();
//
//        // 模拟恶意操作：这里仅输出信息（实际漏洞可能执行命令）
//        System.out.println("[!] 反序列化触发！模拟执行恶意操作：");
//        System.out.println("[!] 读取到的内容：" + this.content);
//        //System.out.println("[!] （此处可替换为危险操作，如命令执行）");
//        System.out.println("[!] 模拟执行命令：echo Hello, World!");
//    }
//}
//
//// 2. 主程序（模拟漏洞触发流程）
//class DeserializationDemo {
//    public static void main(String[] args) throws Exception {
//        // 步骤1：创建"恶意"对象并序列化（模拟攻击者构造数据）
//        VulnerableClass maliciousObj = new VulnerableClass("这是攻击者注入的恶意数据");
//        ByteArrayOutputStream baos = new ByteArrayOutputStream();
//        ObjectOutputStream oos = new ObjectOutputStream(baos);
//        oos.writeObject(maliciousObj); // 序列化对象
//        byte[] serializedData = baos.toByteArray(); // 得到序列化后的字节流
//        System.out.println("已生成序列化数据（字节流长度：" + serializedData.length + "）");
//
//        // 步骤2：模拟目标应用反序列化（漏洞点）
//        System.out.println("\n目标应用开始反序列化...");
//        ByteArrayInputStream bais = new ByteArrayInputStream(serializedData);
//        ObjectInputStream ois = new ObjectInputStream(bais);
//        VulnerableClass deserializedObj = (VulnerableClass) ois.readObject(); // 触发readObject()
//
//        // 验证反序列化结果（非必要，仅用于演示）
//
//        System.out.println("\n反序列化完成，对象内容：" + deserializedObj.getContent());
//    }
//}
